/*****************************************************************************************
 * ETS
 * 
 * Cours:		LOG121
 * Session:		A2013
 * Groupe:		04
 * Projet:		Laboratoire #4
 * Etudiants:	Frederic-Simon Mimeault
 * 				Francisco Felipe Quilodran
 * 				Guillaume Longtin
 * 				William Proulx
 * 
 * Professeur:	Francis Cardinal
 * 
 * Fichier:		Serialize.java
 * 
 * Date de creation:	2013-11-26
 * Date dern. modif.:	2013-12-06
 * ****************************************************************************************
 * Historique des modifications
 * ****************************************************************************************
 * 2013-11-26 Version initiale
 *****************************************************************************************/

package application;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import modele.Figure;
import modele.Perspective;

/**
 * Cette classe est celle qui permettra de sérialiser ou désérialiser le path d'une image.
 * Elle implémente l'interface Serializable afin que l'on puisse définir notre façon de sérialiser.
 * C'est le patron de conception Memento qui est mis en place dans cette classe.
 * @author Guillaume Longtin
 */
public class Serialize implements Serializable {
	
	private Figure figure;
	private Perspective perspective[];

	public void configureSerializer(Figure figure, Perspective perspective[]) {
		
		this.figure = figure;
		this.perspective = perspective;
		
	}
	
	/**
	 * Méthode qui permet de sérialiser le path d'une image en y affectant le type de document ".ass"
	 * @param name
	 * @param path
	 */
	public void serialize(String name, String path) {
		
		try {
			
	         FileOutputStream fileOut = new FileOutputStream("/"+ path + "/" + name + ".ass");
	         ObjectOutputStream out = new ObjectOutputStream(fileOut);
	         out.writeObject(figure.getPath());
	         out.writeObject(perspective);
	         out.close();
	         fileOut.close();
	         
	    } catch(IOException i) {
	    	
	    	i.printStackTrace();
	    	
	    }
		
	}
	
	/**
	 * Méthode qui permet de désérialiser le path d'une image ayant un type ".ass"
	 * @param name
	 * @param path
	 * @throws ClassNotFoundException
	 */
	public void deSerialize(String name, String path) throws ClassNotFoundException {
		
		try {
			
			FileInputStream fileIn = new FileInputStream("/"+ path + "/" + name);
		    ObjectInputStream in = new ObjectInputStream(fileIn);
		    figure.setImage(((String)in.readObject())); 
		    Perspective[] tmp = (Perspective[]) in.readObject();
		     
		    for(int i = 0; i < tmp.length; i++) {
		    	 
		    	perspective[i].setCoordonneeX(tmp[i].getCoordonneeX());
		    	perspective[i].setCoordonneeY(tmp[i].getCoordonneeY());
		    	perspective[i].setEchelle(tmp[i].getEchelle());
		    	perspective[i].setLimiteX(tmp[i].getLimiteX());
		    	perspective[i].setLimiteY(tmp[i].getLimiteY());
		    	 
		    }
		     
		    for(int i = 0; i < perspective.length; i++) {
		    	 
		    	perspective[i].notifier();
		    	 
		    }
		     
		    in.close();
		    fileIn.close();	 
		     
		} catch(IOException e) {
			  
			e.printStackTrace();
		      
		}
	}
}
